package cn.myblog.ainblog.mapper;

import cn.myblog.ainblog.model.ArticleCategoryModel;
import cn.myblog.ainblog.model.ArticleModel;
import cn.myblog.ainblog.vo.ArticleCategoryVO;
import cn.myblog.ainblog.vo.ArticleAndCategoryVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author Dovaior
 * @Description
 * @create 2021-04-12 11:37
 **/
@Repository
public interface ArticleMapper extends BaseMapper<ArticleModel> {
    //多表联查：查询单个博文的全部信息
//    ArticleAndCategoryVO getArticleAndCategory(String articleId);
    /**
     * 多表联查 + 分页
     */
    IPage<ArticleCategoryVO> selectArticleAndCategoryListPage(IPage<ArticleCategoryVO> page);

    /**
     * 前端index 页面的展示全部博文
     */
    List<ArticleCategoryVO> queryAllArticleToIndex();
    /**
     * likeCount前五的博文封面和id
     */
    List<ArticleModel> queryArticleCoverLimit5();
    /**
     * floatBar最新博客展示
     */
    List<ArticleModel> queryArticleModelLimit4();

    /**
     * 查询三条记录，用在前端index页面
     */
    List<ArticleModel> queryArticleAndContentLimit3();

    /**
     * 查询三条记录，用在前端index页面
     */
    List<ArticleModel> queryArticleAndContentLimit3orderdate();

    /**
     * 查询view最高的8条记录
     */
    List<ArticleModel> queryArticleModelByViewLimit8();

    /**
     * 查询指定分类的全部博文，用于category-subpage展示
     */
    List<ArticleCategoryVO> queryArticleModelByCategoryToSubPage(String categoryId);

    /**
     * 查询所有博文的id、图片以及分类名(根据图片去重)
     */
    List<ArticleCategoryVO> queryCoverAndCategoryToPhotoPage();
    /**
     * 详情页面根据相同分类进行推荐
     */
    List<ArticleCategoryVO> queryArticleModelByCategoryLimit6(Map<String,String> map);

    /**
     * 点赞事件，给对应Id的博文点赞
     */
    int likeCountPlusAndQuery(String articleId);

    /**
     * 根据Id值查询点赞数量
     */
    Long queryLikeCountById(String articleId);

    /**
     * 根据标签查询博文
     */
    List<ArticleModel> queryArticleListByTag(String tagId);

    /**
     * 更新博文的评论数量
     */
    int freshCommentCountByArticleId(String articleId);

    /**
     * 删除留言，数量减一
     */
    int deFreshCommentCountByArticleId(String articleId);

    /**
     * 将指定博文的留言数清零
     */
    int clearCommentCountByArticleId(String articleId);

    /**
     * 根据指定id查询博文名
     */
    String queryArticleTitleById(String articleId);

    /**
     * 博文的浏览数量+1
     */
    int viewNumberPlus(String articleId);

    List<ArticleCategoryVO> queryByKeyWord(String keyWord);
}
